其他
选择:成本和安全?我都要!
数据安全
透明数据加密常用于解决一些安全合规问题,如PCI DSS、等级安全保护等要求静态数据需要被保护的场景。
腾讯云数据库 PostgreSQL 通过向用户申请使用 KMS(Key Management Service)服务中保存的主密钥,生成 DEK(Data Encryption Key)密文与 DEK 明文对云产品加密所使用的密钥进行数据加密和解密。
所有的加密解密操作均由数据库在内存中进行,每一次数据库重启以及存在关闭内存的操作时,均会重新从 KMS 获取密钥材料。本地存储中不保存任何可用于解密的密钥材料。
目前PostgreSQL社区版本并不提供数据透明加密的功能,而腾讯云数据库PostgreSQL在内核中实现了透明加密的能力,并且通过密钥托管于用户的KMS服务中,进一步降低了数据被破解的风险,确保数据安全。
PostgreSQL中,pgcrypto是contrib下的一个插件,它提供了一些加密解密函数,可以实现服务器端的数据加密解密。用户可以在SQL语句中调用这些函数来完成数据的加密和解密。
在使用pgcrypto中的加密函数过程中,可以加密比较重要的字段,提高数据的安全性。
pgcrypto模块提供的加密函数有以下几类:通用Hash函数,Password Hash函数,PGP加密函数,Raw加密函数,随机数据函数。
整体来看,字段加密可以有效地防止重点敏感数据泄露,适用于密码、关键数据等加密场景。
有些情况下,有些表的特定列含有敏感数据(如用户信息表中的用户手机号)。毫无疑问,只有指定用户才有权限看到这些敏感数据,其他用户则只能看到脱敏后的数据。如果此时采用数据列级加密,则需要客户端也介入进来进行实现,否则加密和解密实现比较繁琐。
为减少客户业务代码工作的参与,对于此类场景腾讯云数据库PostgreSQL支持客户直接在PostgreSQL中进行配置实现。
第一种方式:通过视图脱敏的方案进行操作,如通过查询语句,将指定字段进行字符串处理。代码如下:
hehe => SELECT id,name,SUBSTRING(phone_number, 1,3) ||'****'||SUBSTRING(phone_number, 7,4) as phone_number FROM t;
id | name | phone_number
----+----------+--------------
1 | zhangsan | 180****2321
1 | lisi | 136****2321
1 | | 177****2423
1 | wangwu | 177****2423
(4 rows)
RLS(ROW Level Security) 是PostgreSQL 9.5版本之后的新增特性,提供了基于行的安全策略,限制数据库用户的查看表数据权限。在其他数据库中,对用户的权限管控均在表级别,例如:限制某个用户只能查询某个表。而采用RLS后,不同的用户访问一个表可以看到不同的数据。
默认情况下,表没有任何安全策略限制。这样用户根据 SQL 特权系统具有对表的访问特权,对于查询或更新来说其中所有的行都是平等的。当在一个表上启用行安全性时,所有对该表选择行或者修改行的普通访问都必须被一条行安全性策略所允许(不过,表的拥有者通常不服从行安全性策略。如果表上不存在安全策略,如果没有配置安全策略,所有的数据查询和更新都会禁止,但是对全表进行操作的命令,比如 TRUNCATE 和 REFERENCES 不受影响。
行安全性策略可以针对特定的命令、角色或者两者。一条策略可以被指定为适用于ALL命令,或者查询(SELECT)、 插入(INSERT)、更新(UPDATE)或者删除(DELETE)。同一个策略可分配多个角色,并且通常的角色成员关系和继承规则也适用。
行级安全策略可适用于在针对多个数据混合存储于同一张表内,又需要根据用户类型进行查看或者读写权限进行分类限制的场景。腾讯云数据库PostgreSQL通过行级安全策略则可以有效避免数据被意外篡改和操作,最大程度上保护数据安全。
实例安全
安全组访问策略可以有效的控制访问数据库的来源IP地址,设置黑白名单,允许指定的网络段、IP地址访问,拒绝风险地址的访问。
腾讯云数据库PostgreSQL访问管理 CAM 则可以用于帮助客户安全管理腾讯云账户下资源的访问权限。通过 CAM,客户可以创建、管理和销毁用户(组),并通过身份管理和策略管理控制指定用户可以使用的腾讯云资源,进而达到权限分离的目的。这种权限管理方式是典型的PBAC(基于策略的访问控制),可以实现资源级粒度的控制。
客户可以通过子帐号实现不同的账号管理不同的服务来规避以上的问题。默认情况下,子帐号没有使用云服务的权利或者相关资源的权限。因此,腾讯云数据库PostgreSQL支持创建策略来允许子帐号使用他们所需要的资源或权限。针对某一个用户、某一个资源、某一个操作均可以做到精细化的控制。进而避免越权操作,让所有的用户仅可操作自己权限范围内的资源。
部署在私有网络中的 PostgreSQL实例默认只能被同一个私有网络中的 CVM 访问,若 CVM 与 PostgreSQL实例不在同一个私有网络,也可以通过申请外网的方式进行访问,考虑到网络安全的问题,不建议采用外网的方式进行数据库访问,若必须采用外网访问 PostgreSQL实例,请配合安全组来实现客户端的访问控制。
VPC的网络基础设施还可以防止DDoS攻击。当用户使用外网连接和访问 PostgreSQL实例时,可能会遭受 DDoS 攻击。针对这一问题,腾讯云数据库提供流量清洗和封堵处理功能,完全由系统自动触发和结束。当腾讯云数据库安全系统认为用户实例正在遭受 DDoS 攻击时,首先会启动流量清洗功能,如果流量清洗无法抵御攻击或者攻击达到封堵阈值,则会进行封堵处理。
云上数据库支持实例回收站能力,当用户出现了实例删除,并不会直接将数据完全清理,而是会在回收站呆上几天。这样避免了误操作或者恶意操作导致的实例无法回收情况。当实例进入回收站后,业务出现异常无法访问,则可帮助客户及时发现问题,进而抓紧时间挽救。
同时腾讯云数据库结合云安全访问策略,使实例的隔离与下线接口掌握在不同权限的负责人手中。这样做可对高危操作进行管理隔离,避免单一人员风险导致的数据库安全问题。
除了通过访问控制策略之外,腾讯云数据库还可以基于商业流程服务BPaaS 与云函数SCF的结合形式,在云上实现审批流服务,使高危操作都受到审批流的管理。
整体来看,以上数据库实例安全的防呆措施,可避免95%以上的实例意外风险,充分保障数据库的稳定运行。
总结
﹀
﹀
﹀
腾讯云在PostgreSQL领域的‘‘再次突破’’
又拿奖了!腾讯云原生数据库TDSQL-C斩获2021PostgreSQL中国最佳数据库产品奖